//引入axios核心库
import axios from "axios";
//引入参数转化工具
import qsString from 'querystring'


//设置一个基础地址
let baseUrl = 'http://localhost:3000/api'

//拦截器 
//请求拦截器
axios.interceptors.request.use(req=>{
return  req
}
    
   
    )
//请求拦截器的使用场景。这里全部是针对请求做的一些操作
//我们常用的就是添加请求头，比如token。比如加密信息。比如终端类型（ios/app/安卓/pc）
    //req.headers.XX = XXX



//响应拦截器
axios.interceptors.response.use(res=>{ return res})
//响应拦截器的使用场景。这里全部是针对于响应进行的一些操作
    //我们常用的是全局错误拦截。 比如：未添加token 比如 token失效 比如链接超时 或者一些全局性的 404 405 406。。。等错误啊


// 封装请求方法:get/post/put/delete  大部分的后端用的是 get  和post  
// =====================================================================
// get:
// params:url,请求地址链接  params 参数 默认值是{}

export const get=(url,params={})=>{
    return new Promise((resolve,reject)=>{
        axios.get(baseUrl+url,{
            params
        }).then(res=>resolve(res))
        .catch(err=>reject(err))
    })
}

// post:
// params:url,请求地址链接  params 参数  默认值是{}  isFile:是否有文件
// 因为默认的类型  ：是payload参数
 
export const post = (url,params={},isFile=false)=>{
    let data = {}
    //post 参数比较特殊。分为两种情况
    //有上传文件
    if(isFile){
        //https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
        data = new FormData()
        for(let i in params){
            data.append(i,params[i])
        }
    }else{
        //没有上传文件
        data= qsString.stringify(params)
    }
    //无上传文件
    return new Promise((resolve,reject)=>{
        axios.post(baseUrl+url,data)
        .then(res=>resolve(res))
        .catch(err=>reject(err))
    })
}





